package linklist;

/**
 * @Author : chenchao
 *
 *  「快乐数」定义为：
 *
 * 对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
 * 然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
 * 如果 可以变为 1，那么这个数就是快乐数。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/happy-number
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 */
public class HappyNum {

    public static void main(String[] args) {

//        System.out.println(isHappy(0));
//        System.out.println(isHappy(10*10000));
//        if(true )return ;
        int happySum = 0;
        for(int i=1 ;i<=10*10000; i++){
            if(isHappy(i)){
                happySum+=i;
            }
        }
        System.out.println("10万以内的快乐数的总和："+happySum);
    }

    public static boolean isHappy(int n) {
        int p = n;
        int q = n;
        while(true){
            p = caculate(p);
            q = caculate(caculate(q));
//            System.out.println("p:"+p+",\tq:"+q);
            if(1==q || 1==caculate(q)){
                return true;
            }else if(p==q){
                return false;
            }
        }
    }
    public static int caculate(int n){
        int res = 0;
        while(n!=0){
            res += (n%10)*(n%10);//每一个数的个位数的平方
            n = n/10;//每次去掉个位数
        }
        return res;
    }

}
